package com.bamboo.tool.util;

import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil;
import com.bamboo.tool.constant.StringConstant;
import com.bamboo.tool.enums.DataType;
import com.bamboo.tool.enums.JavaDataType;
import lombok.Data;

import java.util.Map;

/**
 * @author bamboo
 */
@Data
public class JavaClassValidate {

    private Map<String, DataType> dictMap;

    public JavaClassValidate(Map<String, DataType> dictMap) {
        this.dictMap = dictMap;
    }

    /**
     * 是否忽略此参数，该方法用于方法参数
     *
     * @param typeName 类型完整路径
     * @return boolean
     */
    public boolean isIgnored(String typeName) {
        DataType dataType = dictMap.get(typeName);
        return dataType != null && dataType.equals(DataType.METHOD_PARAMETER_IGNORED);
    }

    public boolean isFile(String... typeNames) {
        for (String typeName : typeNames) {
            DataType dataType =  dictMap.get(typeName);
            if (dataType != null && dataType.equals(DataType.FILE)) {
                return true;
            }
        }
        return false;
    }

    /**
     * 是否为指定类型
     *

     * @return boolean
     */
    public DataType getSpecifyType(String... typeNames) {
        for (String typeName : typeNames) {
            DataType dataType =  dictMap.get(typeName);
            if (dataType != null) {
                return dataType;
            }
        }
        return null;
    }

    /**
     * 是否为泛型
     *
     * @param typeName 类型完整路径
     * @return
     */
    public boolean isGenerics(String typeName) {
        return !typeName.contains(".");
    }

    /**
     * 是否为需要忽略的class
     *
     * @param typeName 类型完整路径
     * @return
     */
    public boolean isFieldIgnoredClass(String typeName) {
        DataType dataType =  dictMap.get(typeName);
        return dataType != null && dataType.equals(DataType.FIELD_IGNORED_CLASS);
    }


}
